/**
 * axios二次封装
 */

import axios from 'axios'
import config from './../config'
import {ElMessage} from 'element-plus'
import router from './../router'
import storage from './storage'

const NETWORK_ERROR = '网络请求异常，请稍后重试'

//创建axios实例对象，添加全局配置
const service = axios.create({
    baseURL:config.baseApi,
    timeout:8000
})

//请求拦截
service.interceptors.request.use((req)=>{
    const headers = req.headers;
    const token = storage.getItem('token');
    if(typeof token != 'undefined'){
        if (!headers.token) {
            headers.token = token;
        }
    }
    return req;
})

//响应拦截
service.interceptors.response.use((res)=>{
    //TO-DO
    const {code,data,msg,token} = res.data;
    if(token != null){
        storage.setItem('token',token)
    }
    if(code === 200){
        return data;
    }else if(code === 402 || code === 403){
        ElMessage.error(msg)
        setTimeout(() => {
           router.push('/login') 
        }, 1000);
        return Promise.reject(msg)
    }else if(code == undefined){
        return res;
    }else{
        ElMessage.error(msg|| NETWORK_ERROR)
        return Promise.reject(msg|| NETWORK_ERROR)
    }
})

/**
 * 请求核心函数
 * @param {*} options 请求配置
 * @returns 
 */
function request(options) {
    options.method = options.method || 'get';
    if(options.method.toLowerCase() === 'get'){
        options.params = options.data;
    }

    if(typeof options.mock != 'undefined'){
        config.mock = options.mock;
    }

    // if(config.env === 'prod'){
    //     service.defaults.baseURL = config.baseApi
        
    // }else{
    //     service.defaults.baseURL = config.mock ? config.mockApi:config.baseApi
    // }

    service.defaults.baseURL = "/iot-platform-api"

    return service(options)
}

export default request;